Container標籤的key是出奇的多,要分幾篇來講。順道先總結.container四個標籤的作用:
[Unit] → systemd 相依與啟動順序
[Container] → podman run 的容器設定
[Service] → systemd 如何管理這個 container service
[Install] → 由哪個 target 啟動服務
而Container標籤key先整理清單如下:
| Key | 用途 | 對應 Podman |
|---|---|---|
Image= |
指定 container image,必填 | image |
ContainerName= |
指定真正的 container 名稱 | --name |
Exec= |
傳給 image ENTRYPOINT/CMD 的命令或參數 | image 後面的 command |
Entrypoint= |
覆蓋 image 的 ENTRYPOINT | --entrypoint |
Environment= |
container 內環境變數 | --env |
EnvironmentFile= |
從檔案載入環境變數 | --env-file |
EnvironmentHost= |
把 host 環境變數帶進 container | --env-host |
Volume= |
bind mount / named volume | --volume |
Mount= |
比 Volume= 更完整的 mount 語法 |
--mount |
PublishPort= |
host port 對映 container port | --publish |
ExposeHostPort= |
宣告 exposed port,不等於 publish | --expose |
Network= |
container 使用哪個 network | --network |
NetworkAlias= |
在 network 裡的 DNS alias | --network-alias |
IP= / IP6= |
固定 IPv4 / IPv6 | --ip, --ip6 |
DNS= |
指定 DNS Server | --dns |
DNSSearch= |
DNS search domain | --dns-search |
DNSOption= |
DNS resolver option | --dns-option |
HostName= |
container hostname | --hostname |
AddHost= |
加 /etc/hosts 記錄 |
--add-host |
User= |
container process 使用 UID/user | --user |
Group= |
container process 使用 group | --user UID:GID |
GroupAdd= |
額外 supplementary group | --group-add |
UserNS= |
user namespace 模式 | --userns |
UIDMap= / GIDMap= |
自訂 UID/GID mapping | --uidmap, --gidmap |
SubUIDMap= / SubGIDMap= |
使用 /etc/subuid/subgid mapping |
--subuidname, --subgidname |
Memory= |
memory limit | --memory |
PidsLimit= |
process 數量上限 | --pids-limit |
Ulimit= |
ulimit | --ulimit |
ShmSize= |
/dev/shm 大小 |
--shm-size |
ReadOnly= |
root filesystem 唯讀 | --read-only |
Tmpfs= |
建立 tmpfs | --tmpfs |
WorkingDir= |
container 裡工作目錄 | --workdir |
Timezone= |
container timezone | --tz |
RunInit= |
使用 init process 處理 zombie | --init |
StopSignal= |
container stop 時 signal | --stop-signal |
StopTimeout= |
graceful stop 等待秒數 | --stop-timeout |
Pull= |
image pull policy | --pull |
LogDriver= |
logging driver | --log-driver |
LogOpt= |
logging driver option | --log-opt |
Label= |
container label | --label |
Annotation= |
OCI annotation | --annotation |
AutoUpdate= |
Podman auto-update | autoupdate label |
Secret= |
Podman secret | --secret |
AddCapability= |
加 Linux capability | --cap-add |
DropCapability= |
移除 capability | --cap-drop |
AddDevice= |
host device 帶進 container | --device |
NoNewPrivileges= |
禁止 process 取得額外權限 | security-opt |
SeccompProfile= |
seccomp policy | security-opt |
SecurityLabel...= |
SELinux label 控制 | security-opt |
HealthCmd= 等 |
container health check | --health-* |
Notify= |
sd_notify 行為 | --sdnotify |
Pod= |
加入 Quadlet .pod |
--pod |
StartWithPod= |
由 pod 統一啟動 container | Quadlet 行為 |
PodmanArgs= |
補上 Quadlet 尚未支援的 run argument | 額外 podman run args |
GlobalArgs= |
放在 podman 命令後、run 前面的 global option |
global args |
Rootfs= |
不使用 image,直接使用 rootfs | --rootfs |
而[Container]裡唯一必填的就只有Image,對比較熟悉單體系統維運的IT來說,重要的key也就以下幾個: